//
//  UIImage+CLCategory.h
//  CLBrowser
//
//  Created by 梁慧聪 on 2021/7/9.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIImage (CLCategory)

/**
 *  返回原始图片
 *
 *  @param name 图片名称
 *
 *  @return 原始图片
 */
+ (nullable UIImage *)imageNamedForOriginal:(nullable NSString *)name;

/**
 *  保持原来的长宽比，生成一个缩略图
 */
- (nullable UIImage *)thumbnailWithImageWithSize:(CGSize)asize;

/**
 *  对一个图片进行圆形裁剪
 *
 *  @return 裁剪好的图片(使用这个方法裁剪出来的圆的半径为传入图片的宽度的一半)
 */
- (nullable UIImage *)roundClipImage;

/**
 *  对一个图片进行圆形裁剪，自定义宽度
 */
- (nullable UIImage *)roundClipImageWithSize:(CGFloat)size;
/**
 *  对一个图片进行圆形剪裁,可添加边框效果
 *
 *  @param borderWidth 边框宽度
 *  @param borderColor 边框颜色
 *
 *  @return 剪裁后的带边框的图片
 */
- (nullable UIImage *)roundClipImageWithBorderWidth:(CGFloat)borderWidth borderColor:(nullable UIColor *)borderColor;

/**
 *  获取没有缓存的UIImage对象
 *
 *  @param imageName 图片名称
 *
 *  @return UIImage对象
 */
//+ (nullable UIImage *)noCacheImageNamed:(nullable NSString *)imageName;

/**
 *  根据颜色和尺寸生成UIImage对象
 *
 *  @param color 颜色
 *  @param size  尺寸
 *
 *  @return UIImage对象
 */
+ (nullable UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size;

/**
 *  创建1像素的图片UIImage
 */
+ (nullable UIImage *)createImageWithColor:(nullable UIColor *)color;

/**
 *  把View生成图片（截图）
 */
+ (nullable UIImage *)getImageFromView:(nullable UIView *)view;

/**
 *  把另一个图片画到自己（图片）的身上
 *
 *  @param otherImage 另一个图片
 *  @param rect       范围
 *
 *  @return UIImage对象
 */
- (nullable UIImage *)drawWithSize:(CGSize)size otherImage:(nullable UIImage *)otherImage inRect:(CGRect)rect;

/**
 *  获取占位图
 *  @param size 大小
 *  @return UIImage对象
 */
+ (nullable UIImage *)placeholderImageWithSize:(CGSize)size;

/**
 *  合成两种图片
 *
 *  @param bgImage       背景图
 *  @param iconImage     前面的图（会画到中间）
 *  @param iconImageSize 前面的图的宽高
 *
 *  @return UIImage对象
 */
+ (nonnull UIImage *)createNewImageWithBg:(nonnull UIImage *)bgImage iconImage:(nonnull UIImage *)iconImage iconImageSize:(CGFloat)iconImageSize;

/**
 *  旋转图片
 *  @param degrees 角度 30/90/180
 */
- (nullable UIImage *)imageRotatedByDegrees:(CGFloat)degrees;

- (nullable UIImage *)imageRotatedByDegrees:(CGFloat)degrees size:(CGSize)size;

/**
 *  图片旋转问题修复
 *
 *  @param aImage 需要修复的图片
 *
 *  @return 修正后的图片
 */
+ (nullable UIImage *)fixOrientation:(nullable UIImage *)aImage;

/**
 *  剪裁圆形图片（指定圆角）
 *
 *  @param cornerRadius 圆角度
 *  @param original     原图
 */
+ (nullable UIImage *)imageWithRoundedCornersSize:(CGFloat)cornerRadius usingImage:(nullable UIImage *)original;


/**
 *  拉伸指定图片
 
 *  @param imageName     原图str
 */
+ (nullable UIImage *)resizableImageWithName:(nullable NSString *)imageName;


/**
 *  拉伸指定图片
 
 *  @param image     原图
 */
+ (nullable UIImage *)resizableImageWithImage:(nullable UIImage *)image;

/**
 添加文字水印
 
 @param image 原图
 @param text 水印文字
 @param point 文字在原图中的坐标
 @param attributed 富文本设置选项
 @return 生成新图片
 */
+ (nullable UIImage *)waterImageWithImage:(nullable UIImage *)image text:(nullable NSString *)text textPoint:(CGPoint)point attributedString:(nullable NSDictionary * )attributed;

/**
 添加图片水印
 
 @param image 原图
 @param waterImage 水印图片
 @param rect 水印在原图中的位置大小信息
 @return 生成的新图片
 */
+ (nullable UIImage *)waterImageWithImage:(nullable UIImage *)image waterImage:(nullable UIImage *)waterImage waterImageRect:(CGRect)rect;

/**
 *  根据图片名返回一张能够自由拉伸的图片 (从中间拉伸)
 */
+ (UIImage *)cl_resizableImage:(NSString *)imgName;
+ (UIImage *)cl_resizableImage:(NSString *)imgName capInsets:(UIEdgeInsets)capInsets;


/// 返回一张未被渲染的图片
+ (UIImage *)cl_imageAlwaysShowOriginalImageWithImageName:(NSString *)imageName;
/// 获取视频某个时间的帧图片
+ (UIImage *)cl_thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time;

/// /// 获取屏幕截图
///
/// @return 屏幕截图图像
+ (UIImage *)cl_screenShot;

/// 菱形图片
+ (instancetype)clipImgWithName:(NSString *)name;
/// 菱形
- (UIImage *)clipImg;

- (UIImage *)imageByScalingAndCroppingForSize:(CGSize)targetSize;

-(UIImage *)OriginImage:(UIImage *)image scaleToSize:(CGSize)size;

/// 圆角图片
+ (UIImage *)cl_maskRoundCornerRadiusImageWithColor:(UIColor *)color cornerRadii:(CGSize)cornerRadii size:(CGSize)size corners:(UIRectCorner)corners borderColor:(UIColor *)borderColor borderWidth:(CGFloat)borderWidth;
@end

NS_ASSUME_NONNULL_END
